#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
    int getMaxLen(vector<int>& nums) {
        //状态表示 dp[i] 以i为结尾的最大长度
        //          [0]乘积为负 [1]乘积为正
        //        根据前一个推导后一个        
        vector<int>dp0(nums.size());
        auto dp1=dp0;
        if(nums[0]) nums[0]>0?++dp1[0]:++dp0[0];
        for(int i=1;i<nums.size();i++){
            if(nums[i]==0){
                dp1[i]=dp0[i]=0;
            }
            else if(nums[i]>0){
                dp1[i]=dp1[i-1]+1;
                dp0[i]=dp0[i-1]?dp0[i-1]+1:0;
            }
            else{
                dp0[i]=dp1[i-1]+1;
                dp1[i]=dp0[i-1]?dp0[i-1]+1:0;
            }
        }
        return *max_element(dp1.begin(),dp1.end());
    }
};